# coding=utf-8
# manage.py 只做最基本的启动工作，将 app 的创建操作移动到 info 的 __init__.py 文件中
from flask import Flask
from flask_migrate import Migrate,MigrateCommand
from flask_wtf.csrf import CSRFProtect
from flask_sqlalchemy import SQLAlchemy
import redis
from flask_session import Session

from config import Config   #导入配置文件
from config import Config_dict #导入配置字典,应用实例


redis_store=None
db=SQLAlchemy()
def create_app(config_name):
    """通过传入不同的配置名字，初始化其对应配置的应用实例"""
    app = Flask(__name__)
    #这个函数获取配置类
    config_cls=Config_dict[config_name]

    # 1.加载项目配置信息
    app.config.from_object(config_cls)

    # 2.导入数据库扩展，并在配置中填写相关配置
    db.init_app(app)

    # 3.创建redis存储对象session，并在配置中填写相关配置????
    global redis_store
    redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)

    # 4.包含请求体的请求都需要开启CSRF
    CSRFProtect(app)

    # 5.利用 flask-session扩展，将 session 数据保存到 Redis 中
    Session(app)
    return app
